package devcamp.team;

import java.util.List;

import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;

import devcamp.team.connection.ServerConnectionModel;
import devcamp.team.data.WowoooooooUserData;
import devcamp.team.util.PinItemOverlay;
import devcamp.team.util.WowoooooooUtils;

public class WowListActivity extends MapActivity {
    /**
     * ログ出力用のタグ.
     */
    private static final String TAG = "WowListActivity";
    private float latitude;
    private float longitude;
    private MapView mapView;
    private LinearLayout listView;
    private Button backButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wowlist);
        // intentからデータを取得する
        getData();

    }

    /**
     * インテントからデータを取得する.
     */
    void getData() {
        Intent i = getIntent();
        latitude = i.getFloatExtra(WowoooooooUtils.LATITUDE, 0);
        longitude = i.getFloatExtra(WowoooooooUtils.LONGITUDE, 0);
    }

    @Override
    protected void onResume() {
        super.onResume();
        // ビューを取得する
        initView();
        // データ取得開始
        GetList getList = new GetList();
        getList.execute();
    }

    /**
     * 画面の構成要素を初期化する.
     */
    void initView() {

        LinearLayout l = (LinearLayout) findViewById(R.id.favmap);
        LinearLayout l2 = (LinearLayout) getLayoutInflater().inflate(R.layout.mapview, null);
        mapView = (MapView) l2.findViewById(R.id.mymap);
        Log.d(TAG, "inflate map");
        mapView.requestLayout();
        mapView.setBuiltInZoomControls(true);

        l.addView(l2);
        //        mapView = (MapView) findViewById(R.id.favmap);
        listView = (LinearLayout) findViewById(R.id.userlist);
        backButton = (Button) findViewById(R.id.backbutton);
        backButton.setOnClickListener(getBackButtonClickListener());
    }

    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
    
    

    @Override
	public void onBackPressed() {
    	Log.d(TAG, "onBackPressed");
		super.onBackPressed();
		
		 // 念のため、削除処理追加
        LinearLayout l = (LinearLayout) findViewById(R.id.favmap);

        l.removeAllViews();
	}

	/**
     * 戻るボタンを押したときのコールバックするリスナーを取得する.<br/>
     * 以下の動作をする.<br/>
     * <ul
     * <li>トップ画面へ遷移する</li>
     * </ul>
     * 
     * @return 戻るボタンのリスナー
     */
    OnClickListener getBackButtonClickListener() {
        return new OnClickListener() {

            @Override
            public void onClick(View v) {
            	/*
            	// DevCampTeamAActivity.onCreate() からの処理へ遷移する
            	// DevCampTeamAActivity でのバックキー処理：二回しないと終了しない状況になる。
            	// ->　よって、DevCampTeamAActivity でのバックキー処理をカスタマイズしておく。
            	// -> 中断終了後、menu画面から再度main起動した場合に、onResume()からになり、結局　map 出ない
                Intent intent = new Intent();
                intent.setClassName("devcamp.team", "devcamp.team.DevCampTeamAActivity");
                WowListActivity.this.startActivity(intent);
                
                // 削除処理追加
                LinearLayout l = (LinearLayout) findViewById(R.id.favmap);

                l.removeAllViews();
                
                finish();// 設定画面の手動終了
                */
            	
                // バックキーと同じ処理に統一
            	// DevCampTeamAActivity.onResume() からの処理へ遷移する
            	// map 部分を削除してるので、map出なくなる  -> 出るように対応修正
            	onBackPressed();
            }
        };
    }


    class GetList extends AsyncTask<Void, Void, List<WowoooooooUserData>> {

        @Override
        protected void onPreExecute() {
            //TODO:プログレスダイアログを表示する
        }

        @Override
        protected List<WowoooooooUserData> doInBackground(Void... params) {
            //TODO:サーバと通信してデータを取得する
            List<WowoooooooUserData> userList = ServerConnectionModel.getNearUsers(latitude, longitude);
            Log.d(TAG, "result list :" + userList.size());
            PinItemOverlay pinOverlay = new PinItemOverlay(getResources().getDrawable(R.drawable.pin_g), userList);
            MapController mc = mapView.getController();
            int lat = (int) (latitude * 1E6);
            int lng = (int) (longitude * 1E6);
            GeoPoint point = new GeoPoint(lat, lng);
            mc.setCenter(point);
            pinOverlay.setContext(WowListActivity.this);
            pinOverlay.setMapController(mc);
            mapView.getOverlays().add(pinOverlay);

            return userList;
        }

        @Override
        protected void onPostExecute(List<WowoooooooUserData> resultList) {
            //TODO:プログレスダイアログを閉じる
            if (resultList == null || resultList.size() == 0) {
                //TODO:結果が0件の場合の処理をどうするか
            }
            //TODO:データの反映をViewに対して行う

            setRecommendUserView(resultList);

        }

        void setRecommendUserView(List<WowoooooooUserData> resultList) {
            for (int i = 0; i < resultList.size(); i++) {
                WowoooooooUserData data = resultList.get(i);
                View v = getLayoutInflater().inflate(R.layout.view, null);
                TextView userView = (TextView) v.findViewById(R.id.recomendUser);
                userView.setText("NickName : " + data.getUserName());
                TextView twitterIdView = (TextView) v.findViewById(R.id.recomendTwitterId);
                twitterIdView.setText("Twitter ID : " + data.getTwitterId());
                listView.addView(v, i);
            }
        }

    }

}
